package com.xdqzy.baseline.common.manager;

import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Optional;

/**
 * @param <U> key的泛型
 * @param <R> value的泛型
 * @version V1.0
 * @Title: 数据库缓存加载接口
 * @ClassName: com.xdqzy.baseline.common.manager.IDbCacheLoader.java
 * @Description:
 * @author: winter
 * @date: 2020-10-26 22:57
 */
public interface IDbCacheLoader<U extends Serializable, R extends Object> {
    /**
     * 批量加载
     *
     * @param keys 缓存的key集合
     * @return
     */
    List batchLoad(Collection<U> keys);


    /**
     * 单个加载
     *
     * @param key
     * @return
     */
    default R singleLoad(U key) {
        if (key == null) {
            return null;
        }
        return (R) Optional.ofNullable(batchLoad(Collections.singletonList(key))).orElse(Collections.emptyList()).stream().findAny().orElse(null);
    }

    /**
     * 失效时间，单位是秒
     *
     * @return
     */
    default long ttlSeconds() {
        return 3600L;
    }


}
